We don't need your loop

by serge_sans_paille

Quarkslab / Télécom Bretagne / Namek

PyConFR 2015

Une brève histoire de la boucle

Assembleur

.L3:
    addsd   (%rsi), %xmm0
    addq    $8, %rsi
    cmpq    %rax, %rsi
    jne .L3

FORTRAN

do 10 i = 1, n
         sum = sum + A(i)
  10  continue

C

for(unsigned i = 0; i < n ; ++i)
  sum += A[i];

APL

+/ A

Python

In [5]:
import numpy
n = 10
A = numpy.random.random(n)
print(A)
[ 0.96706992  0.09807134  0.56416815  0.86161619  0.67314169  0.33983478
  0.49379355  0.14648739  0.42572865  0.30762786]

Fortran style

In [7]:
s = 0
for i in range(n):
    s += A[i]
print(s)
4.8775395287

APL style

In [10]:
s = numpy.sum(A)
print(s)
4.8775395287
  • Une préférence ?*